package _99练习;

import java.util.Vector;

public class Exercise1 {
	
	public static String genPass = null;
	public static Vector<String> passAll = new Vector<>();

	public static void main(String[] args) throws InterruptedException {

		// 练习:
		// 1. 小明和大明同时吃包子,各吃100个。编写代码测试

		// 2. 小明和大明同时吃包子,一起吃100个。编写代码测试

		// 3. 通过3种不同方式，让小明和大明不要同时吃同一个包子。编写代码测试。

		// 4. 一个宿舍住了6个同学(张三李四王五赵六刘备曹操),
		// 早上起来要执行6件事:穿衣服,刷牙,洗脸,上厕所,吃早饭,整理物品
		// 其中:厕所只有一个，只能一个同学使用。(上厕所同一时间只能1个同学在执行)
		// 每一件事需要花费5分钟
		// 编写代码显示这个6个同学执行的情况
		// 最后执行完的同学用了多少分钟? 6*5 = 30分钟 5*5=25分钟 55分钟

//		StudentRunnable s = new StudentRunnable();
//		Thread t1 = new Thread(s);
//		Thread t2 = new Thread(s);
//		Thread t3 = new Thread(s);
//		Thread t4 = new Thread(s);
//		Thread t5 = new Thread(s);
//		Thread t6 = new Thread(s);
//		t1.setName("张三");
//		t2.setName("李四");
//		t3.setName("王五");
//		t4.setName("赵六");
//		t5.setName("刘备");
//		t6.setName("曹操");
//
//		t1.start();
//		t2.start();
//		t3.start();
//		t4.start();
//		t5.start();
//		t6.start();

		// 5. 创建一个窗体。
		// 添加一个按钮,点击按钮，窗口的背景颜色开始随机变色
		// 添加一个按钮,顶级按钮,停止变色
//		int r = (int)(Math.random()*256);
//		int g = (int)(Math.random()*256);
//		int b = (int)(Math.random()*256);
//		Color c = new Color(r,g,b);
//		窗体设置背景颜色的方法: setBackground(c)

		// * 6 编写一个秒表程序
		// https://naozhong.net.cn/miaobiao/#enabled=0&msec=1197
		// 一个Label
		// 两个按钮
		// 提示:
		// 点击开始后，记录开始时间，开启线程，线程中不断计算与开始时间的间隔，显示到Label上

		// * 7 编写一个游戏 10秒挑战游戏
		// 点击开始按钮秒表开始跳动
		// 点击停，记录停止时间
		// 如果停止时间正好10.00s，则游戏赢了
		// 记录并显示，最接近的记录

		// 8.
		// 8.1 创建一个长度为4的随机字符串(大写字母小写字母数字) a1Fz
		Exercise1.genPass = generateCode(2);
		System.out.print(Exercise1.genPass);
		Thread.sleep(3000);
		
		// 8.2 创建一个破解密码的线程，使用穷举法，匹配这个密码.
		CrackPassRunnable r = new CrackPassRunnable();
		Thread t = new Thread(r);
		// 8.3 创建一个日志线程,打印都用过哪些字符串去匹配，把这个日志线程设计为守护线程
		PrintRunnable p = new PrintRunnable();
		Thread t2 = new Thread(p);
		t2.setDaemon(true);
		// 提示: 破解线程穷举的密码都放到一个容器中，日志线程从这个容器中取出打印，并从容器中移除。
		t.start();
		t2.start();
		
//		aaaa
//		aaab
//		aaac
//		aaad 
//		
//		Aaaa
//		ZZZZ

	}

	public static String generateCode(int n) {


		// 然后产生一个长度为n随机的字符串(含小写、大写、数字)
		char[] cs = new char[62];// 26+26+10
		for (int i = 0; i < 26; i++) {
			cs[i] = (char) ('a' + i);
			cs[i + 26] = (char) ('A' + i);
		}
		for (int i = 0; i < 10; i++) {
			cs[51 + i] = (char) ('0' + i);
		}
		String str = new String(cs);
//		System.out.println(str);

		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < n; i++) {
			sb.append(str.charAt((int) (Math.random() * str.length())));
		}
//		System.out.println(sb.toString());
		
		return sb.toString();
	}

}
